#include <iostream>
#include <stdio.h>
using namespace std;

class Parent
{
public:
	Parent(int a=0)
	{
		this->a=a;
	}
	
	virtual void printf()
	{
		cout<<"Parent"<<endl;
	}
private:
    int a;
	
};

#if 0
class Child : public Parent
{
public:
/*	Child(int a=0)
	{
		this->a=a;
		printf();
	}
*/
    Child()
    {
    	
    }
	void printf()
	{
		cout<<"Child"<<endl;
	}
 private:
/*    int a;
    int b;*/
};
#else 
class Child : public Parent
{
public:
	Child(int a=0)
	{
		this->a=a;
		printf();
	}

    Child()
    {
    	
    }
	void printf()
	{
		cout<<"Child"<<endl;
	}
 private:
    int a;
    int b;
};
#endif

void func(Parent* p)
{
	p->printf();
}

int main()
{
	Child *c1=NULL;
	Parent *p1=NULL;
	Child array[]={Child(1),Child(2),Child(3)};
//	Child array[]={Child(),Child(),Child()};
  
    c1=array;
    p1=array;
    printf("---------\n");
    //子类和父类的指针步长不一样。若子类没有任何成员，步长会一致。
    c1++;
    p1++;
    func(c1);//若把注释打开，只打印到这句，下面的无法执行。
    func(p1);
    
    c1++;
    p1++;
    func(c1);
    func(p1);
    
	return 0;	
}




